home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ARexxTools / CatUpdate100.lha / CD2M2.rexx next >
Encoding:
OS/2 REXX Batch file  |  1993-09-29  |  3.9 KB  |  133 lines

  1. /* $VER: CD2M2.rexx 00.01 (03.04.93) © S.Sürken                */
  2. /*                                    */
  3. /* Creates a Modula-2 Definition and Implementation file out of a    */
  4. /* language description file                        */
  5. /*                                    */
  6. /* Will automatically add a "Version" constant to source file.        */
  7. /*                                    */
  8.  
  9. /* INITIALIZATION */
  10. modName        = "VMDefaultStrings";    /* change this to your needs */
  11. strVar        = "str"            /* change this to your needs */
  12.  
  13. inputName    = WORD(ARG(1), 1)
  14. defOutputName    = WORD(ARG(1), 2)
  15. impOutputName    = WORD(ARG(1), 3)
  16. /* END INITIALIZATION */
  17.  
  18. /* CONTINUE WITH INIT? */
  19. SAY "Input   CD-File: "inputName
  20. SAY "Output Def-File: "defOutputName
  21. SAY "Output Imp-File: "impOutputName
  22.  
  23. SAY "Sure to continue? "
  24. IF UPPER(READCH(STDIN, 1)) ~= "Y"
  25.    THEN DO
  26.           SAY "Cancelled."; EXIT 10         /* user cancel */
  27.         END
  28. /* END CONTINUE WITH INIT? */
  29.    
  30. /* OPEN FILES */
  31. IF OPEN(input, inputName, read) & OPEN(defOutput, defOutputName, write) & OPEN(impOutput, impOutputName, write)
  32.    THEN SAY "Files correctly opened, please wait..."
  33.    ELSE DO
  34.           SAY "File error."; EXIT 10        /* error cancel */
  35.         END
  36. /* END OPEN FILES */
  37.  
  38. /* READ VERSION */
  39. DO UNTIL (Kind(line) = 3)            /* Version! */
  40.   line = READLN(input)
  41. END
  42. version = SUBSTR(line, POS("$VER:", line))
  43.  
  44. SAY "Descriptor-Version      "version        /* full version (text) */
  45. version    = TRUNC(WORD(version, 3))
  46. SAY "Descriptor-Main-Version "version        /* main version (number) */
  47. /* END READ VERSION */
  48.  
  49. /* WRITE DEF-HEAD */
  50. CALL WRITELN(defOutput, "DEFINITION MODULE "modName";")
  51. CALL AutoProduced(defOutput)
  52. CALL WRITELN(defOutput, "IMPORT S: SYSTEM;")
  53. CALL WRITELN(defOutput, "")
  54. CALL WRITELN(defOutput, "CONST version = "version";")    /* main version */
  55. CALL WRITELN(defOutput, "")
  56. /* END WRITE DEF-HEAD */
  57.  
  58. /* WRITE IMP-HEAD */
  59. CALL WRITELN(impOutput, "IMPLEMENTATION MODULE "modName";")
  60. CALL AutoProduced(defOutput)
  61. CALL WRITELN(impOutput, "IMPORT S: SYSTEM;")
  62. CALL WRITELN(impOutput, "")
  63. CALL WRITELN(impOutput, "BEGIN")
  64. CALL WRITELN(impOutput, "")
  65. /* END WRITE IMP-HEAD */
  66.    
  67. /* GENERATE OUTPUT */
  68. code = -1
  69. DO WHILE ~EOF(input)
  70.    line = READLN(input)
  71.               
  72.    IF Kind(line) = 2
  73.       THEN DO
  74.              id        = WORD(line, 1)
  75.              text    = READLN(input)
  76.              
  77.              IF COMPARE(id, "") ~= 0
  78.                 THEN DO
  79.                        code = code+1
  80.                        /*SAY "Generating Code "code*/
  81.                        CALL WRITELN(defOutput, id"="code";")
  82.                        CALL WRITELN(impOutput, strVar"["id"] := S.ADR('"text"');")
  83.                      END
  84.            END
  85. END                          
  86. /* END GENERATE OUTPUT */
  87.  
  88. /* WRITE DEF-FOOT */
  89. CALL WRITELN(defOutput, "")
  90. CALL WRITELN(defOutput, "CONST max="code";")
  91. CALL WRITELN(defOutput, "")
  92. CALL WRITELN(defOutput, "VAR str: ARRAY [0..max] OF S.ADDRESS;")
  93. CALL WRITELN(defOutput, "")
  94. CALL WRITELN(defOutput, "END "modName".")
  95. /* END WRITE DEF-FOOT */
  96.  
  97. /* WRITE IMP-FOOT */
  98. CALL WRITELN(impOutput, "")
  99. CALL WRITELN(impOutput, "END "modName".")
  100. /* END WRITE IMP-FOOT */
  101.  
  102. /* OUT STATUS */
  103. SAY ""
  104. SAY "Codes from 0 to "code", altogether "code+1" Strings."
  105. SAY ""
  106. /* END OUT STATUS */
  107.  
  108. EXIT 0            /* done exit */
  109.  
  110.  
  111. /* MACROS */
  112.  
  113. /* Kind(text) --> whatKind */
  114. Kind: SELECT
  115.         WHEN POS("#", ARG(1)) = 1
  116.              THEN RETURN 0        /* a command */
  117.         WHEN POS("$VER:", UPPER(ARG(1))) ~= 0
  118.              THEN RETURN 3        /* the version line */
  119.         WHEN POS(";", ARG(1)) = 1
  120.              THEN RETURN 1        /* a comment */
  121.         OTHERWISE RETURN 2        /* a relevant line */
  122.       END
  123.  
  124. /* AutoProduced(file) --> SIDE: write text to file */
  125. AutoProduced: DO
  126.                 CALL WRITELN(ARG(1), "(*")
  127.                 CALL WRITELN(ARG(1), "This file was automatically produced by CD2M2.")
  128.                 CALL WRITELN(ARG(1), "Do not edit by hand.")
  129.                 CALL WRITELN(ARG(1), "CD2M2 is an AREXX-Script by © S.Sürken.")
  130.                 CALL WRITELN(ARG(1), "*)")
  131.                 RETURN
  132.               END
  133.